/******************************************************************************
	This file is a part of the Snapshot Bioinformatics Project

	Copyright (C) 2012-2013 Jarom Schow

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
#ifndef COMMAND_UTIL_H
#define COMMAND_UTIL_H

#include <QtCore/QObject>
#include <QtCore/QStringList>
#include <QtCore/QHash>

class CommandUtil : public QObject {
public:
	CommandUtil();
	virtual ~CommandUtil();

	virtual bool	event( QEvent *e );

protected:

	virtual bool	run() = 0;
	virtual void	printUsage() = 0;

	QStringListIterator	getGeneralArgs() const;

	void	registerArg( const QString &key, QString &val, bool required = false );
	void	registerFlag( const QString &key, bool &val );

	void	error( const QString &msg );
	void	warning( const QString &msg );
	void	output( const QString &msg );

private:

	bool	exec();
	bool	parseArgs();

	struct	Argument {
		QString	*m_arg;
		bool	m_required;
	};

	QHash<QString,Argument>	m_args;
	QHash<QString,bool*>	m_flags;
	QStringList				m_generalArgs;
};

#endif // COMMAND_UTIL_H